﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AlarmClock
{
    public partial class Form1 : Form
    {

        // 创建 Timer 控件，模拟闹钟的“嘀嗒”事件
        private Timer timer;
        private DateTime alarmTime;  // 用户设置的闹钟时间
        private int countdownSeconds;  // 剩余倒计时时间（秒）
        // 定义闹钟事件
        public event EventHandler Tick;       // 嘀嗒事件
        public event EventHandler Alarm;      // 响铃事件
        public Form1()
        {
            InitializeComponent();
            InitializeClock();
        }
        // 初始化 Timer 和事件订阅
        private void InitializeClock()
        {
            // 创建一个 Timer 控件，设置它的间隔时间为 1000 毫秒（1秒）
            timer = new Timer();
            timer.Interval = 1000;  // 每秒触发一次
            timer.Tick += Timer_Tick;  // 注册 Timer 的 Tick 事件
        }

        // Timer 的 Tick 事件处理程序
        private void Timer_Tick(object sender, EventArgs e)
        {
            // 每秒触发 Tick 事件
            Tick?.Invoke(this, e);  // 如果有订阅事件，则触发 Tick 事件
            UpdateTimeDisplay();

            // 检查当前时间是否达到了设定的闹钟时间
            if (DateTime.Now >= alarmTime)
            {
                Alarm?.Invoke(this, e);  // 如果有订阅事件，则触发 Alarm 事件
            }
        }

        // 更新界面上的时间显示
        private void UpdateTimeDisplay()
        {
            lblTime.Text = DateTime.Now.ToString("HH:mm:ss");
        }

        // 嘀嗒事件的订阅方法
        private void OnTick(object sender, EventArgs e)
        {
            lblMessage.Text = "嘀嗒...";  // 显示“嘀嗒”信息
        }

        // 响铃事件的订阅方法
        private void OnAlarm(object sender, EventArgs e)
        {
            lblMessage.Text = "闹钟响铃！时间到！";  // 显示闹钟响铃的信息
            timer.Stop();  // 停止计时器
        }
        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            // 设置闹钟时间为当前时间的5秒后
            alarmTime = DateTime.Now.AddSeconds(5);
            countdownSeconds = (int)(alarmTime - DateTime.Now).TotalSeconds;  // 计算倒计时的秒数
            lblMessage.Text = $"闹钟已设置，剩余时间：{countdownSeconds}秒";
            timer.Start();  // 启动计时器

            // 订阅事件
            Tick += OnTick;
            Alarm += OnAlarm;
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            timer.Stop();  // 停止计时器
            lblMessage.Text = "闹钟停止。";
            Tick -= OnTick;  // 取消订阅 Tick 事件
            Alarm -= OnAlarm;  // 取消订阅 Alarm 事件
        }
    }
}
